package com.thinkgem.jeesite.modules.pay.util.UPOPUtil;

import java.util.HashMap;
import java.util.Map;

import com.thinkgem.jeesite.modules.pay.entity.log.EcPayLog;
import com.thinkgem.jeesite.modules.pay.util.PayUtil;

public class UPOPInstall {

	public static Map<String, String> installParamsForPay(EcPayLog log) {
		Map<String, String> requestData = new HashMap<String, String>();
		/***银联全渠道系统，产品参数，除了encoding自行选择外其他不需修改***/
		//版本号，全渠道默认值
		requestData.put("version", PayUtil.version);   	
		
		//字符集编码，可以使用UTF-8,GBK两种方式
		requestData.put("encoding", PayUtil.encoding_UTF8); 
		
		//签名方法，只支持 01：RSA方式证书加密
		requestData.put("signMethod", "01"); 
		
		//交易类型 ，01：消费
		requestData.put("txnType", "01");  
		
		//交易子类型， 01：自助消费
		requestData.put("txnSubType", "01"); 
		
		//业务类型，B2C网关支付，手机wap支付
		requestData.put("bizType", "000201"); 
		
		//渠道类型，这个字段区分B2C网关支付和手机wap支付；07：PC,平板  08：手机
		requestData.put("channelType", "07");      
		
		/***商户接入参数***/
		//商户号码，请改成自己申请的正式商户号或者open上注册得来的777测试商户号
		requestData.put("merId", log.getMerChantid());   
		
		//接入类型，0：直连商户 
		requestData.put("accessType", "0"); 
		
		//商户订单号，8-40位数字字母，不能含“-”或“_”，可以自行定制规则	
		requestData.put("orderId",log.getCoNum());  
		
		//订单发送时间，取系统时间，格式为YYYYMMDDhhmmss，必须取当前时间，否则会报txnTime无效
		requestData.put("txnTime", PayUtil.getCurrentTime()); 
		
		//交易币种（境内商户一般是156 人民币）		
		requestData.put("currencyCode", "156");
		
		//交易金额，单位分，不要带小数点
		requestData.put("txnAmt", String.valueOf(log.getAmount()).substring(0,String.valueOf(log.getAmount()).indexOf(".")));   
		
		//请求方保留域，如需使用请启用即可；透传字段（可以实现商户自定义参数的追踪）本交易的后台通知,对本交易的交易状态查询交易、对账文件中均会原样返回，商户可以按需上传，长度为1-1024个字节
		//requestData.put("reqReserved", "透传字段");        		      
				
		//前台通知地址 （需设置为外网能访问 http https均可），支付成功后的页面 点击“返回商户”按钮的时候将异步通知报文post到该地址
		//如果想要实现过几秒中自动跳转回商户页面权限，需联系银联业务申请开通自动返回商户权限
		//异步通知参数详见open.unionpay.com帮助中心 下载  产品接口规范  网关支付产品接口规范 消费交易 商户通知
		requestData.put("frontUrl", PayUtil.frontUrl);
		
		//后台通知地址（需设置为【外网】能访问 http https均可），支付成功后银联会自动将异步通知报文post到商户上送的该地址，失败的交易银联不会发送后台通知
		//后台通知参数详见open.unionpay.com帮助中心 下载  产品接口规范  网关支付产品接口规范 消费交易 商户通知
		//注意:1.需设置为外网能访问，否则收不到通知    2.http https均可  3.收单后台通知后需要10秒内返回http200或302状态码 
		//4.如果银联通知服务器发送通知后10秒内未收到返回状态码或者应答码非http200，那么银联会间隔一段时间再次发送。总共发送5次，每次的间隔时间为0,1,2,4分钟。
		//5.后台通知地址如果上送了带有？的参数，例如：http://abc/web?a=b&c=d 在后台通知处理程序验证签名之前需要编写逻辑将这些字段去掉再验签，否则将会验签失败
		requestData.put("backUrl", PayUtil.backUrl);
		return requestData;
	}
	public static Map<String, String> installParamsForCheck(EcPayLog log){
		Map<String, String> data = new HashMap<String, String>();
		
		/***银联全渠道系统，产品参数，除了encoding自行选择外其他不需修改***/
		//版本号
		data.put("version", PayUtil.version);   
		//字符集编码 可以使用UTF-8,GBK两种方式
		data.put("encoding", PayUtil.encoding_UTF8);  
		//签名方法 目前只支持01-RSA方式证书加密
		data.put("signMethod", "01");
		//交易类型 00-默认
		data.put("txnType", "00");  
		//交易子类型  默认00
		data.put("txnSubType", "00"); 
		//业务类型 B2C网关支付，手机wap支付
		data.put("bizType", "000201");                         
		
		/***商户接入参数***/
		//商户号码，请改成自己申请的商户号或者open上注册得来的777商户号测试
		data.put("merId", log.getMerChantid()); 
		//接入类型，商户接入固定填0，不需修改
		data.put("accessType", "0");                           
		
		/***要调通交易以下字段必须修改***/
		//****商户订单号，每次发交易测试需修改为被查询的交易的订单号
		data.put("orderId", log.getOrderNo());  
		//****订单发送时间，每次发交易测试需修改为被查询的交易的订单发送时间
		data.put("txnTime", log.getPayTime());
		
		// 待查询交易的流水号
		data.put("queryId", "");
		// 格式如下：{子域名1=值&子域名2=值&子域名3=值} 子域： origTxnType N2原交易类型余额查询时必送
        data.put("reserved", "");// O
		return data;
	}
	
	public static Map<String, String> installParamsForRefund(String txnAmt,EcPayLog ecPayLog){
		Map<String, String> data = new HashMap<String, String>();
		/***银联全渠道系统，产品参数，除了encoding自行选择外其他不需修改***/
		//版本号
		data.put("version", PayUtil.version);    
		//字符集编码 可以使用UTF-8,GBK两种方式
		data.put("encoding", PayUtil.encoding_UTF8);  
		//签名方法 目前只支持01-RSA方式证书加密
		data.put("signMethod", "01");
		//交易类型 04-退货
		data.put("txnType", "04");  
		//交易子类型  默认00	
		data.put("txnSubType", "00");   
		//业务类型 B2C网关支付，手机wap支付	
		data.put("bizType", "000201"); 
		//渠道类型，07-PC，08-手机
		data.put("channelType", "07");                      
		
		/***商户接入参数***/
		//商户号码，请改成自己申请的商户号或者open上注册得来的777商户号测试
		data.put("merId", ecPayLog.getMerChantid());   
		//接入类型，商户接入固定填0，不需修改		
		data.put("accessType", "0");      
		//商户订单号，8-40位数字字母，不能含“-”或“_”，可以自行定制规则，重新产生，不同于原消费		
		data.put("orderId", ecPayLog.getPayTime());   
		//订单发送时间，格式为YYYYMMDDhhmmss，必须取当前时间，否则会报txnTime无效
		data.put("txnTime", ecPayLog.getPayTime());  
		//交易币种（境内商户一般是156 人民币）	
		data.put("currencyCode", "156");  
		//****退货金额，单位分，不要带小数点。退货金额小于等于原消费金额，当小于的时候可以多次退货至退货累计金额等于原消费金额	
		
		data.put("txnAmt", txnAmt.substring(0,txnAmt.indexOf(".")));                         
		//data.put("reqReserved", "透传信息");
		//请求方保留域，如需使用请启用即可；透传字段（可以实现商户自定义参数的追踪）本交易的后台通知,对本交易的交易状态查询交易、对账文件中均会原样返回，商户可以按需上传，长度为1-1024个字节		
		//后台通知地址，后台通知参数详见open.unionpay.com帮助中心 下载  产品接口规范  网关支付产品接口规范 退货交易 商户通知,其他说明同消费交易的后台通知
		data.put("backUrl", PayUtil.backUrl);               
		/***要调通交易以下字段必须修改***/
		//****原消费交易返回的的queryId，可以从消费交易后台通知接口中或者交易状态查询接口中获取
		data.put("origQryId",ecPayLog.getPaySeq());      
		return data;
	}
}
